package com.loopeer.test.itemtouchhelperextension;
import android.content.Context;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.loopeer.itemtouchhelperextension.Extension;
import com.loopeer.itemtouchhelperextension.ItemTouchHelperExtension;
import java.util.ArrayList;
import java.util.List;
public class MainRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final int ITEM_TYPE_RECYCLER_WIDTH = 1000;
public static final int ITEM_TYPE_ACTION_WIDTH = 1001;
public static final int ITEM_TYPE_ACTION_WIDTH_NO_SPRING = 1002;
public static final int ITEM_TYPE_NO_SWIPE = 1003;
private List<TestModel> mDatas;
private Context mContext;
private ItemTouchHelperExtension mItemTouchHelperExtension;
public MainRecyclerAdapter(Context context) {
mDatas = new ArrayList<>();
mContext = context;
}
public void setDatas(List<TestModel> datas) {
mDatas.clear();
mDatas.addAll(datas);
}
public void updateData(List<TestModel> datas) {
setDatas(datas);
notifyDataSetChanged();
}
public void setItemTouchHelperExtension(ItemTouchHelperExtension itemTouchHelperExtension) {
mItemTouchHelperExtension = itemTouchHelperExtension;
}
private LayoutInflater getLayoutInflater() {
return LayoutInflater.from(mContext);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = getLayoutInflater().inflate(R.layout.list_item_main, parent, false);
if (viewType == ITEM_TYPE_ACTION_WIDTH) return new ItemSwipeWithActionWidthViewHolder(view);
if (viewType == ITEM_TYPE_NO_SWIPE) return new ItemNoSwipeViewHolder(view);
if (viewType == ITEM_TYPE_RECYCLER_WIDTH) {
view = getLayoutInflater().inflate(R.layout.list_item_with_single_delete, parent, false);
return new ItemViewHolderWithRecyclerWidth(view);
}
return new ItemSwipeWithActionWidthNoSpringViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
ItemBaseViewHolder baseViewHolder = (ItemBaseViewHolder) holder;
baseViewHolder.bind(mDatas.get(position));
baseViewHolder.mViewContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, "Item Content click: #" + holder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
if (holder instanceof ItemViewHolderWithRecyclerWidth) {
ItemViewHolderWithRecyclerWidth viewHolder = (ItemViewHolderWithRecyclerWidth) holder;
viewHolder.mActionViewDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
doDelete(holder.getAdapterPosition());
}
});
} else if (holder instanceof ItemSwipeWithActionWidthViewHolder) {
ItemSwipeWithActionWidthViewHolder viewHolder = (ItemSwipeWithActionWidthViewHolder) holder;
viewHolder.mActionViewRefresh.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, "Refresh Click" + holder.getAdapterPosition()
, Toast.LENGTH_SHORT).show();
mItemTouchHelperExtension.closeOpened();
}
}
);
viewHolder.mActionViewDelete.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
doDelete(holder.getAdapterPosition());
}
}
);
}
}
private void doDelete(int adapterPosition) {
mDatas.remove(adapterPosition);
notifyItemRemoved(adapterPosition);
}
public void move(int from, int to) {
TestModel prev = mDatas.remove(from);
mDatas.add(to > from ? to - 1 : to, prev);
notifyItemMoved(from, to);
}
@Override
public int getItemViewType(int position) {
if (mDatas.get(position).position == 1) {
return ITEM_TYPE_ACTION_WIDTH_NO_SPRING;
}
if (mDatas.get(position).position == 2) {
return ITEM_TYPE_RECYCLER_WIDTH;
}
if (mDatas.get(position).position == 3) {
return ITEM_TYPE_NO_SWIPE;
}
return ITEM_TYPE_ACTION_WIDTH;
}
@Override
public int getItemCount() {
return mDatas.size();
}
class ItemBaseViewHolder extends RecyclerView.ViewHolder {
TextView mTextTitle;
TextView mTextIndex;
View mViewContent;
View mActionContainer;
public ItemBaseViewHolder(View itemView) {
super(itemView);
mTextTitle = (TextView) itemView.findViewById(R.id.text_list_main_title);
mTextIndex = (TextView) itemView.findViewById(R.id.text_list_main_index);
mViewContent = itemView.findViewById(R.id.view_list_main_content);
mActionContainer = itemView.findViewById(R.id.view_list_repo_action_container);
}
public void bind(TestModel testModel) {
mTextTitle.setText(testModel.title);
mTextIndex.setText("#" + testModel.position);
itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
mItemTouchHelperExtension.startDrag(ItemBaseViewHolder.this);
}
return true;
}
});
}
}
class ItemViewHolderWithRecyclerWidth extends ItemBaseViewHolder {
View mActionViewDelete;
public ItemViewHolderWithRecyclerWidth(View itemView) {
super(itemView);
mActionViewDelete = itemView.findViewById(R.id.view_list_repo_action_delete);
}
}
class ItemSwipeWithActionWidthViewHolder extends ItemBaseViewHolder implements Extension {
View mActionViewDelete;
View mActionViewRefresh;
public ItemSwipeWithActionWidthViewHolder(View itemView) {
super(itemView);
mActionViewDelete = itemView.findViewById(R.id.view_list_repo_action_delete);
mActionViewRefresh = itemView.findViewById(R.id.view_list_repo_action_update);
}
@Override
public float getActionWidth() {
return mActionContainer.getWidth();
}
}
class ItemSwipeWithActionWidthNoSpringViewHolder extends ItemSwipeWithActionWidthViewHolder implements Extension {
public ItemSwipeWithActionWidthNoSpringViewHolder(View itemView) {
super(itemView);
}
@Override
public float getActionWidth() {
return mActionContainer.getWidth();
}
}
class ItemNoSwipeViewHolder extends ItemBaseViewHolder {
public ItemNoSwipeViewHolder(View itemView) {
super(itemView);
}
}
}